package our.pack;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class TracksDataSource {

	private SQLiteDatabase database;
	private DatabaseHelper dbHelper;
	private String[] allColums = { DatabaseHelper.getTrackID(), DatabaseHelper.getTrackName(), DatabaseHelper.getTrackDate(), DatabaseHelper.getTrackDistance()/**, DatabaseHelper.getTrackPoints()**/ };
	
	public TracksDataSource(Context context){
		dbHelper = new DatabaseHelper(context);
	}
	
	/**
	 *  opens the database
	 * @throws SQLException
	 */
	public void open() throws SQLException {
		database = dbHelper.getWritableDatabase();
	}
	
	/**
	 * closes the database
	 */
	public void close() {
		dbHelper.close();
	}
	
	/**
	 * Eerst worden de waardes in de database gestopt, vervolgens wordt er een cursor aangemaakt die de laatste entry in de database afleest
	 * de cursorToTrack(Cursor cursor) functie zorgt vervolgens dat er een MyPoint object wordt aangemaakt met de laatste waardes uit de database
	 * 
	 * @param trackName de naam voor de track die aangemaakt wordt
	 * @return geeft een object van de klasse Track terug
	 */
	public Track createTrack(String trackName, String dateString, int distance) {
		ContentValues values = new ContentValues();
		values.put(DatabaseHelper.getTrackName(), trackName);
		values.put(DatabaseHelper.getTrackDate(), dateString);
		values.put(DatabaseHelper.getTrackDistance(), distance);
		long instertId = database.insert(DatabaseHelper.getTrackTable(), null, values);
		Cursor cursor = database.query(DatabaseHelper.getTrackTable(), allColums, DatabaseHelper.getTrackID(), null, null, null, null);
		cursor.moveToLast();
		Track newTrack = cursorToTrack(cursor);
		cursor.close();
		return newTrack;
		
	}
	
	public void addTrack(Track track){
		ContentValues values = new ContentValues();
		
		values.put(DatabaseHelper.getTrackName(), track.getTrackName());
		long instertId = database.insert(DatabaseHelper.getTrackTable(), null, values);
		Cursor cursor = database.query(DatabaseHelper.getTrackTable(), allColums, DatabaseHelper.getTrackID(), null,null,null,null);
		cursor.moveToLast();
		setTrackID(track, cursor);
		cursor.close();
	}

	
	public void renameTrack(Track track, String trackName){
		ContentValues values = new ContentValues();
		values.put(DatabaseHelper.getTrackName(), trackName);
		database.update(DatabaseHelper.getTrackTable(), values, track.getID() + " = " + DatabaseHelper.getTrackID() , null);
		
	}
	
	/**
	 * 
	 * @param track de track die uit de database verwijderd wordt
	 */
	public void deleteTrack(Track track)
	{
		long id = track.getID();
		database.delete(DatabaseHelper.getTrackTable(), DatabaseHelper.getTrackID() + " = " + id, null);
		
	}
	
	/**
	 * 
	 * @return geeft alle tracks terug in een List
	 */
	public List<Track> getAllTracks() {
		List<Track> tracks = new ArrayList<Track>();
		
		Cursor cursor = database.query(DatabaseHelper.getTrackTable(), allColums, null, null, null, null, null);
		cursor.moveToFirst();
		while(!cursor.isAfterLast()) {
			Track track = cursorToTrack(cursor);
			tracks.add(track);
			cursor.moveToNext();
		}
		
		cursor.close();
		return tracks;
	}
	

//	private void changeName(Track track){
//		ContentValues values = new ContentValues();
//		values.put();
//		database.update(DatabaseHelper.getTrackTable(),values , DatabaseHelper.getTrackID() + " = " + track.getID() ,null);
//		
//	}
//	
	
	/**
	 * 
	 * maakt een nieuw Track object aan voor de row van de database waar de cursor op staat
	 * 
	 * @param cursor
	 * @return geeft een object van de klasse Track terug
	 */
	private Track cursorToTrack(Cursor cursor){
		Track track = new Track();
		track.setID(cursor.getLong(0));
		track.setTrackName(cursor.getString(1));
		track.setDateString(cursor.getString(2));
		track.setDistance(cursor.getInt(3));
		return track;
	}
	
	private Track setTrackID(Track track, Cursor cursor){
		track.setID(cursor.getLong(0));		
		return track;
	}
	
}
